#!/bin/bash

##############################################################################

_printVariables() {

	if [ "$CONFDIR" ]; then
		./LoguearT IniciarT I --id_msj=ICONFDIR "$CONFDIR"
	fi
	if [ "$ARRIDIR" ]; then
		./LoguearT IniciarT I --id_msj=IARRIDIR "$ARRIDIR"
	fi
	if [ "$RECHDIR" ]; then
		./LoguearT IniciarT I --id_msj=IRECHDIR "$RECHDIR"
	fi
	if [ "$BINDIR" ]; then
		./LoguearT IniciarT I --id_msj=IBINDIR "$BINDIR"
	fi
	if [ "$MAEDIR" ]; then
		./LoguearT IniciarT I --id_msj=IMAEDIR "$MAEDIR"
	fi
	if [ "$REPODIR" ]; then
		./LoguearT IniciarT I --id_msj=IREPODIR "$REPODIR"
	fi
	if [ "$LOGDIR" ]; then
		./LoguearT IniciarT I --id_msj=ILOGDIR "$LOGDIR"
	fi
	if [ "$LOGEXT" ]; then
		./LoguearT IniciarT I --id_msj=ILOGEXT "$LOGEXT"
	fi
	if [ "$LOGSIZE" ]; then 
		./LoguearT IniciarT I --id_msj=ILOGSIZE "$LOGSIZE"
	fi
	if [ "$DATASIZE" ]; then
		./LoguearT IniciarT I --id_msj=IDATASIZE "$DATASIZE"
	fi

}

##############################################################################

_exportarVariables() {

	#exportamos las variables de entorno
	export AMBIENTE_INICIALIZADO
	export CONFDIR
	export ARRIDIR
	export RECHDIR
	export BINDIR
	export MAEDIR
	export REPODIR
	#export LOGDIR
	#export LOGEXT
	#export LOGSIZE
	export DATASIZE

	# seteamos el PATH
	export PATH="$PATH:$BINDIR"

}

##############################################################################

_iniciarArchivoLog(){
	#Inicializo archivo de log
	LOGDIR="$GRUPO/log"
	if [ -f "$LOGDIR/IniciarT.log" ]; then
		rm "$LOGDIR/IniciarT.log"
	fi
}

##############################################################################
#
#	MAIN
#
##############################################################################

#Codigos de retorno
OK=0
AMBIENTE_YA_INICILIZADO=1
DEMONIO_YA_ESTA_CORRIENDO=2
INSTALACION_NO_FUE_EXITOSA=3

#estado del sistema
ESTADO_SISTEMA=""

#Chequeo si el sistema ya esta inicializado
if [ "$AMBIENTE_INICIALIZADO" ]; then
	ESTADO_SISTEMA="INICIALIZADO"
	#Me fijo si esta seteada la variable GRUPO ya que la usa el LoguearT
	if [ "$GRUPO" ]; then
		#Informo por log que el sistema ya esta inicializado
		_iniciarArchivoLog
		./LoguearT IniciarT I --id_msj=INI
		_printVariables
		./LoguearT IniciarT I --id_msj=IESTADO "$ESTADO_SISTEMA"
		./LoguearT IniciarT E --id_msj=IE1
		./LoguearT IniciarT E --id_msj=ICANCEL
	fi
	#fin de ejecucion
    returncode=$AMBIENTE_YA_INICILIZADO
    return $returncode
else
	#Tomo el dir grupo del directorio padre al directorio donde esta el script
	CUR_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
	GRUPO="$(dirname "$CUR_DIR")"
	#exporto la variable GRUPO para que la pueda usar el LoguearT
	export GRUPO
	CONFDIR="$GRUPO/confdir"
	_iniciarArchivoLog
	returncode=$OK
fi


		
#Verificar Instalacion

esOk=`expr 1 = $(expr $returncode = $OK)`

#veo si existe el archivo de configuracion
if [ $esOk -eq 1 ]; then
	if [ ! -f "$CONFDIR/InstalarT.conf" ]; then
		./LoguearT IniciarT SE --id_msj=IE2		
		returncode=$INSTALACION_NO_FUE_EXITOSA
		return $returncode
	elif [  ! -s "$CONFDIR/InstalarT.conf" ]; then
		./LoguearT IniciarT SE --id_msj=IE3	
		returncode=$INSTALACION_NO_FUE_EXITOSA
		return $returncode
	else
		#si existe el archivo de configuracion y tiene datos, obtengo de alli los valores para las variables de ambiente
		GRUPO=$(grep "^GRUPO = *" "$CONFDIR/InstalarT.conf" | sed "s/^GRUPO = *//" | sed 's/.$//')
		ARRIDIR=$(grep "^ARRIDIR = *" "$CONFDIR/InstalarT.conf" | sed "s/^ARRIDIR = *//" | sed 's/.$//')
		RECHDIR=$(grep "^RECHDIR = *" "$CONFDIR/InstalarT.conf" | sed "s/^RECHDIR = *//" | sed 's/.$//')
		BINDIR=$(grep "^BINDIR = *" "$CONFDIR/InstalarT.conf" | sed "s/^BINDIR = *//" | sed 's/.$//')
		MAEDIR=$(grep "^MAEDIR = *" "$CONFDIR/InstalarT.conf" | sed "s/^MAEDIR = *//" | sed 's/.$//')
		REPODIR=$(grep "^REPODIR = *" "$CONFDIR/InstalarT.conf" | sed "s/^REPODIR = *//" | sed 's/.$//')
		LOGDIR=$(grep "^LOGDIR = *" "$CONFDIR/InstalarT.conf" | sed "s/^LOGDIR = *//" | sed 's/.$//')
		LOGEXT=$(grep "^LOGEXT = *" "$CONFDIR/InstalarT.conf" | sed "s/^LOGEXT = *//")
		LOGSIZE=$(grep "^LOGSIZE = *" "$CONFDIR/InstalarT.conf" | sed "s/^LOGSIZE = *//")
		DATASIZE=$(grep "^DATASIZE = *" "$CONFDIR/InstalarT.conf" | sed "s/^DATASIZE = *//")
		
		#Se exportan al comienzo para poder usar el LoguearT
		export LOGDIR
		export LOGEXT
		export LOGSIZE
	fi
fi

./LoguearT IniciarT I --id_msj=INI

./LoguearT IniciarT I "$FILE"

esOk=`expr 1 = $(expr $returncode = $OK)`

directorios_instalados=( )
directorios_faltantes=( )
comandos_instalados=( )
comandos_faltantes=( )
maestros_instalados=( )
maestros_faltantes=( )

if [ $esOk -eq 1 ]
then
#chequeo de directorios instalados
	if [ -d "$CONFDIR" ]; then
		directorios_instalados=( "${directorios_instalados[@]}" "Librería del Sistema: $CONFDIR" )
	else  
		directorios_faltantes=( "${directorios_faltantes[@]}" "Librería del Sistema: $CONFDIR" )
	fi
	if [ -d "$ARRIDIR" ]; then
		directorios_instalados=( "${directorios_instalados[@]}" "Directorio de arribo de archivos externos: $ARRIDIR" )
	else  
		directorios_faltantes=( "${directorios_faltantes[@]}" "Directorio de arribo de archivos externos: $ARRIDIR" )
	fi
	if [ -d "$RECHDIR" ]; then
		directorios_instalados=( "${directorios_instalados[@]}" "Directorio de grabación de los archivos externos rechazados: $RECHDIR" )
	else
		directorios_faltantes=(  "${directorios_faltantes[@]}" "Directorio de grabación de los archivos externos rechazados: $RECHDIR" )
	fi
	if [ -d "$BINDIR" ]; then
		directorios_instalados=( "${directorios_instalados[@]}" "Directorio de instalación de los ejecutables: $BINDIR" )
		#chequeo de comandos instalados
		if [ -f "$BINDIR/DetectarT" ]; then
			comandos_instalados=( "${comandos_instalados[@]}" "DetectarT" )
		else
			comandos_faltantes=( "${comandos_faltantes[@]}" "DetectarT" )
		fi
		if [ -f "$BINDIR/GrabarParqueT" ]; then
			comandos_instalados=( "${comandos_instalados[@]}" "GrabarParqueT" )
		else
			comandos_faltantes=( "${comandos_faltantes[@]}" "GrabarParqueT" )
		fi
		if [ -f "$BINDIR/IniciarT" ]; then
			comandos_instalados=( "${comandos_instalados[@]}" "IniciarT" )
		else
			comandos_faltantes=( "${comandos_faltantes[@]}" "IniciarT" )
		fi
		if [ -f "$BINDIR/ListarT.pl" ]; then
			comandos_instalados=( "${comandos_instalados[@]}" "ListarT.pl" )
		else
			comandos_faltantes=( "${comandos_faltantes[@]}" "ListarT.pl" )
		fi
		if [ -f "$BINDIR/LoguearT" ]; then
			comandos_instalados=( "${comandos_instalados[@]}" "LoguearT" )
		else
			comandos_faltantes=( "${comandos_faltantes[@]}" "LoguearT" )
		fi
		if [ -f "$BINDIR/MirarT" ]; then
			comandos_instalados=( "${comandos_instalados[@]}" "MirarT" )
		else
			comandos_faltantes=( "${comandos_faltantes[@]}" "MirarT" )
		fi
		if [ -f "$BINDIR/MoverT" ]; then
			comandos_instalados=( "${comandos_instalados[@]}" "MoverT" )
		else
			comandos_faltantes=( "${comandos_faltantes[@]}" "MoverT" )
		fi
		if [ -f "$BINDIR/StartD" ]; then
			comandos_instalados=( "${comandos_instalados[@]}" "StartD" )
		else
			comandos_faltantes=( "${comandos_faltantes[@]}" "StartD" )
		fi
		if [ -f "$BINDIR/StopD" ]; then
			comandos_instalados=( "${comandos_instalados[@]}" "StopD" )
		else
			comandos_faltantes=( "${comandos_faltantes[@]}" "StopD" )
		fi
	else
		directorios_faltantes=( "${directorios_faltantes[@]}" "Directorio de instalación de los ejecutables: $BINDIR" )
	fi
	if [ -d "$MAEDIR" ]; then
		directorios_instalados=( "${directorios_instalados[@]}" "Directorio de instalación de los archivos maestros: $MAEDIR" )
		#chequeo de archivos maestros instalados
		if [ -f "$MAEDIR/cli.mae" ]; then
			maestros_instalados=( "${maestros_instalados[@]}" "cli.mae" )
		else
			maestros_faltantes=( "${maestros_faltantes[@]}" "cli.mae" )
		fi
		if [ -f "$MAEDIR/prod.mae" ]; then
			maestros_instalados=( "${maestros_instalados[@]}" "prod.mae" )
		else
			maestros_faltantes=( "${maestros_faltantes[@]}" "prod.mae" )
		fi
		if [ -f "$MAEDIR/sucu.mae" ]; then
			maestros_instalados=( "${maestros_instalados[@]}" "sucu.mae" )
		else
			maestros_faltantes=( "${maestros_faltantes[@]}" "sucu.mae" )
		fi
	else
		directorios_faltantes=( "${directorios_faltantes[@]}" "Directorio de instalación de los archivos maestros: $MAEDIR" )
	fi
	if [ -d "$REPODIR" ]; then
		directorios_instalados=( "${directorios_instalados[@]}" "Directorio de grabación de los reportes de salida: $REPODIR" )
	else
		directorios_faltantes=( "${directorios_faltantes[@]}" "Directorio de grabación de los reportes de salida: $REPODIR" )
	fi
	if [ -d "$LOGDIR" ]; then
		directorios_instalados=( "${directorios_instalados[@]}" "Directorio de grabación de los logs de auditoria: $LOGDIR" )
	else
		directorios_faltantes=( "${directorios_faltantes[@]}" "Directorio de grabación de los logs de auditoria: $LOGDIR" )
	fi
fi


./LoguearT IniciarT I --id_msj=ICOMPEX
for ((i = 0; i < ${#directorios_instalados[@]}; i++))
do
    ./LoguearT IniciarT I "${directorios_instalados[$i]}"
    if [[ "${directorios_instalados[$i]}" == *$BINDIR* ]]; then
    	./LoguearT IniciarT I --id_msj=ICOMEX
    	for ((j = 0; j < ${#comandos_instalados[@]}; j++))
		do
    		./LoguearT IniciarT I "${comandos_instalados[$j]}"
		done
	fi
	if [[ "${directorios_instalados[$i]}" == *$MAEDIR* ]]; then
		./LoguearT IniciarT I --id_msj=IMAEEX
    	for ((k = 0; k < ${#maestros_instalados[@]}; k++))
		do
    		./LoguearT IniciarT I "${maestros_instalados[$k]}"
		done
	fi
done


cant_dir=${#directorios_faltantes[@]}
cant_cmd=${#comandos_faltantes[@]}
cant_mae=${#maestros_faltantes[@]}

if [ $cant_dir -gt 0 ] || [ $cant_cmd -gt 0 ] || [ $cant_mae -gt 0 ]; then
	./LoguearT IniciarT SE --id_msj=ICOMPFAL
	if [ $cant_dir -gt 0 ]; then
		./LoguearT IniciarT SE --id_msj=IDIRFAL
		for ((i = 0; i < ${#directorios_faltantes[@]}; i++))
		do
			./LoguearT IniciarT I "${directorios_faltantes[$i]}"
		done
	fi
	
	if [ $cant_cmd -gt 0 ]; then
		./LoguearT IniciarT SE --id_msj=ICOMFAL
		for ((j = 0; j < ${#comandos_faltantes[@]}; j++))
		do
			./LoguearT IniciarT I "${comandos_faltantes[$j]}"
		done
	fi
	
	if [ $cant_mae -gt 0 ]; then
		./LoguearT IniciarT SE --id_msj=IMAEFAL
		for ((k = 0; k < ${#maestros_faltantes[@]}; k++))
		do
			./LoguearT IniciarT I "${maestros_faltantes[$k]}"
		done
	fi
	ESTADO_SISTEMA="PENDIENTE de INSTALACION"
	./LoguearT IniciarT SE --id_msj=IESTADO "$ESTADO_SISTEMA"
else
	ESTADO_SISTEMA="INSTALADO"
	./LoguearT IniciarT I --id_msj=IESTADO "$ESTADO_SISTEMA"
fi


if [[ "$ESTADO_SISTEMA" == "PENDIENTE de INSTALACION" ]]; then
	returncode=$INSTALACION_NO_FUE_EXITOSA
	return $returncode
fi

# Setear variables
./LoguearT IniciarT I --id_msj=INIVAR
AMBIENTE_INICIALIZADO="Y"
_exportarVariables
_printVariables
ESTADO_SISTEMA="INICIALIZADO"
./LoguearT IniciarT I --id_msj=IESTADO "$ESTADO_SISTEMA"

# Chequeo que demonio DetectarT no este corriendo para ejecutarlo
cant=$(ps -e | grep "DetectarT" | wc -l)

if [ $cant -eq "0" ]; then
	chmod 775 DetectarT
	./DetectarT &
	./LoguearT IniciarT I --id_msj=IDEM $!    
fi

./LoguearT IniciarT I --id_msj=IFIN

returncode=$OK
return $returncode